package com.zzptc.zzsgz.bdsjws.utils;

import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Environment;
import android.provider.ContactsContract;
import android.telephony.SmsManager;


import com.zzptc.zzsgz.bdsjws.MyApplication;
import com.zzptc.zzsgz.bdsjws.com.Constants;
import com.zzptc.zzsgz.bdsjws.db.MobileInfoDao;
import com.zzptc.zzsgz.bdsjws.vo.Contact;
import com.zzptc.zzsgz.bdsjws.vo.MobileInfo;

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.net.URL;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * Created by Administrator on 2017/4/23.
 */
//普通java类 没有上下文
public class MyUtils {
    //返回共享首选项对象
    public static SharedPreferences getpreferences(){
        //获取上下文 再获取共享首选项
        return MyApplication.getContext().getSharedPreferences("loginnew", Context.MODE_PRIVATE);

    }
    //首先判断是否存在SD卡
    public  static boolean haveSD() {
        //状态是SD卡可读可写MEDIA_MOUNTED   nvironment环境 getExternalStorageState()外部存储器状态
        if (Environment.getExternalStorageState().equals (Environment.MEDIA_MOUNTED) ){
            return true;
        }
        else {
            return false;
        }
    }
    //得到文件的路径
    public  static File getDir(){
        if(haveSD()){
            //getExternalStorageDirectory()   getDownloadCacheDirectory()
            return Environment.getExternalStorageDirectory();
        }
        return Environment.getDownloadCacheDirectory();
        //return Environment.getExternalStorageDirectory();
    }
    public static Intent getinstallApk(File file){
        Intent intent=new Intent(Intent.ACTION_VIEW);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
        intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive");
        //MyApplication.getContext().startActivity(intent);
        return intent;
    }
    public static int daysBetween(Date smdate,Date bdate) throws ParseException {
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        smdate=sdf.parse(sdf.format(smdate));
        bdate=sdf.parse(sdf.format(bdate));
        Calendar cal = Calendar.getInstance();
        cal.setTime(smdate);
        long time1 = cal.getTimeInMillis();
        cal.setTime(bdate);
        long time2 = cal.getTimeInMillis();
        long between_days=(time2-time1)/(1000*3600*24);

        return Integer.parseInt(String.valueOf(between_days));
    }

    //获取版本号
    public static int getVersionCode(Context context)//获取版本号(内部识别号)
    {
        try {
            PackageInfo pi=context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
            return pi.versionCode;
        } catch (PackageManager.NameNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return 0;
        }
    }

    // 复制文件到手机端
    public static void copyFileToMobile(Context context,String fromname,String toname)throws Exception{
        // 原始文件的位置
        URL urldir=context.getClass().getClassLoader().getResource("assets/"+fromname);
        // 文件夹路径
        String dbfiledir="/data/data/"+MyApplication.getContext().getPackageName()+"/databases";
        File fileMobiledir=new File(dbfiledir);
        if (!fileMobiledir.exists()){
            fileMobiledir.mkdir();
        }

        File dbfileMobile=new File(fileMobiledir+"/"+toname);
        if (!dbfileMobile.exists()){
            dbfileMobile.createNewFile();
        }
        //  第一个参数 是包含路径源文件  第二个参数  目的地包含路径的文件
        FileUtils.copyURLToFile(urldir,dbfileMobile);
    }
    /**
     * 得到手机上的联系人信息
     * 姓名  电话号码  手机归属地
     *  三个属性封装成一个实体类 vo pojo entity
     * @return
     */
    public static List<Contact> getAllContacts(){
        List<Contact> lists=new ArrayList<Contact>();

        // 通过内容提供者查询联系人
        //访问联系人URL
        //ContactsContract.Contacts.CONTENT_URI;
        //访问电话号码的URL
        //ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
        ContentResolver contentProvider=MyApplication.getContext().getContentResolver();
        Cursor cursor=contentProvider.query(ContactsContract.Contacts.CONTENT_URI,null,null,null,null);
        if (cursor!=null)  {
            while (cursor.moveToNext()) {
                // 获取ID
                int id = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts._ID));
                // 获取联系人姓名
                String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                // 手机归属地 涉及外部数据库
                int num=cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));

                String phonenum=null;
                //如果大于0，表示有电话号码
                if (num>0){
                    phonenum=getPhonenumByID(id);
                }
                //获得手机归属地？？？
                //准备工作  将外部的数据库拷贝到手机中的方法 1.在哪里调用MyAppication 2.使用greendao框架来调用外部数据库
                String addr=null;
                addr=getAddressByTel(phonenum);


                Contact contact1=new Contact(id,name,phonenum,addr);
                lists.add(contact1);
            }
            cursor.close();
        }
        return lists;
    }

    //正则表达式
    private static String getAddressByTel(String tel) {
        String address=null;
        //String[] aa=tel.split(" ");
        String newtel= tel.replace("","").replace("-","").substring(0,7);
        String telnum=null;
        if (newtel.length()==11&&newtel.matches("^1[3578]\\d{9}$")){
            //手机号码
           telnum=newtel.substring(0,7);
            address=getMobileAddrByTel(telnum);
        }else {
            //座机号码  3+7  3+8   4+7  4+8
            int length=newtel.length();
            switch (length){
                case 10:
                    getZUOJIAddrByTel(newtel,3);
                    break;
                case 11:
                    //分两种情况   3+8  4+7
                    address=getZUOJIAddrByTel(newtel,3);
                    if (address==null){
                        address=getZUOJIAddrByTel(newtel,4);
                    }
                    break;
                case 12:
                    address=getZUOJIAddrByTel(newtel,4);
                    break;
                default:
                    address="未知";
            }

        }
        return address;
    }

    public static String getZUOJIAddrByTel(String tel,int end){
        MobileInfo mobileInfo=MyApplication.getMobiledaoSession().getMobileInfoDao().queryBuilder()
                .where(MobileInfoDao.Properties.AreaCode.eq(tel.substring(0,end))).limit(1).distinct().unique();
        return mobileInfo.getMobileArea();
    }

    public static String getMobileAddrByTel(String tel){
        MobileInfo mobileInfo=MyApplication.getMobiledaoSession().getMobileInfoDao().queryBuilder()
                .where(MobileInfoDao.Properties.MobileNumber.eq(tel)).distinct().unique();
        return mobileInfo.getMobileArea();
    }

    private static String getPhonenumByID(int id) {
        String telnum=null;
        ContentResolver contentResolver=MyApplication.getContext().getContentResolver();
        Cursor cursor=contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER},
                ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"=?",new String[]{id+""},null);
        if (cursor!=null){
            //我这只取一个电话号码
            if (cursor.moveToNext()){
                telnum=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            }
        }
        cursor.close();

        return telnum;
    }
    public void sendSMS(String num,String message){
        SmsManager smsManager=SmsManager.getDefault();
        List<String> divideMessage=smsManager.divideMessage(message);
        for (String text:divideMessage){
            smsManager.sendTextMessage(num,null,text,null,null);
        }
    }

}


